home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
GNULicense
/
GNULicense.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
8KB
|
303 lines
// Copyright (C) 1989 Jacob Gore
//
// This file is part of GNULicense, a package to ease the inclusion
// of the GNU General Public License into NextStep applications.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 1, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA
// or send electronic mail to Jacob Gore <jacob@gore.com>.
// The code to print the License leaves much to be desired. I have left my
// most successful attempts at providing the user with the printing interface
// that is supposed to be the norm on the NeXT (put up a PrintPanel, etc.) in
// this file, commented out. If anybody can do it right, please send me the
// code!
//
// Jacob Gore <jacob@gore.com>
#import "GNULicense.h"
#import <appkit/appkit.h>
#import <appkit/Application.h>
#import <appkit/Panel.h>
#import <appkit/PrintPanel.h>
#import <appkit/PrintInfo.h>
#import <appkit/Speaker.h>
#import <appkit/TextField.h>
#import <stdio.h>
#import <string.h>
#import <stdlib.h>
#import <syslog.h>
@implementation GNULicense
+ new
{
self = [super new];
[NXApp loadNibSection:"GNULicense.nib" owner:self];
[panel setMiniwindowIcon:"app"];
return self;
}
- showLicense:sender
{
[panel makeKeyAndOrderFront:sender];
return self;
}
// The original intention of this version of -printLicense: was to let
// WriteNow print it. I was hoping that I could just send -msgPrint:ok: to
// port "WriteNow", and WriteNow would either just print it with default
// user choices, or, better yet, put up a PrintPanel for the user.
//
// It appears that WriteNow does not respond to -msgPrint:ok: at all...
// so, I just make WriteNow open the file, and I ask the user to do the
// printing from WriteNow. Yuck.
// -- Jacob
//
- (int)printLicenseFile:(const char*)fullFileName
{
int retCode;
int ok = (int)NO;
[NXApp deactivateSelf];
retCode = [speaker openFile:fullFileName ok:&ok];
if (retCode != 0) {
NXRunAlertPanel(NULL, "Cannot connect to WriteNow",
"Cancel", NULL, NULL);
return -2; // Tell NXFilePathSearch to quit at this point
} else if (!ok) {
return 1; // Tell NXFilePathSearch to continue searching
} else {
return -2; // Tell NXFilePathSearch to quit at this point
}
}
static int
printLicenseFile(const char *fullFileName, void *self)
{
return [(GNULicense*)self printLicenseFile:fullFileName];
}
- printLicense:sender
{
int response;
response = NXRunAlertPanel("Sorry to bother you",
"I will make WriteNow open the License "
"document. Please print it from there.",
NULL, "Cancel", NULL);
if (response == NX_ALERTDEFAULT) {
int port = NXPortFromName("WriteNow", NULL);
if (port == PORT_NULL) {
NXRunAlertPanel(NULL, "Cannot connect to WriteNow",
"Cancel", NULL, NULL);
} else {
const char *searchPath =
"~/Library/GNU:/LocalLibrary/GNU:/NextLibrary/GNU:.";
const char *fileName = "GNULicense.wn";
int retCode;
speaker = [Speaker new];
[speaker setSendPort:port];
retCode = NXFilePathSearch(NULL, searchPath, YES, fileName,
printLicenseFile, (void*)self);
if (retCode != -2) {
syslog(LOG_ERR,
"Readable file \"%s\" not found in path \"%s\"",
fileName, searchPath);
NXRunAlertPanel(NULL, "I cannot find file GNULicense.wn.",
"Cancel", NULL, NULL);
}
}
}
return self;
}
// Could not get this version to work:
//
// 1. Save button on PrintPanel does not return to this code, but instead
// saves "what has been spooled". I cannot figure out how to make the
// postscript file to be the "what has been spooled".
//
// 2. If you select a page range to preview, Preview chokes on the output
// of psrev that it gets.
//
// Close, but no banana.
// -- Jacob
//
// - printLicense:sender
// {
// int pickedButtonTag;
// PrintPanel *printPanel;
//
// printPanel = [PrintPanel new];
// pickedButtonTag = [printPanel runModal];
// [printPanel orderOut:self];
//
// if (pickedButtonTag == NX_CANCELTAG) {
//
// return self;
//
// } else {
//
// const char *fileName = "/LocalLibrary/GNU/GNULicense.ps";
// char spoolFileName[] = "/tmp/GNULicenseXXXXXX.ps";
// PrintInfo *printInfo;
// const char *psrevCommandFormat = "psrev%s%s %s > %s";
// char *psrevCommand;
// BOOL allPages;
// char psrevPagesOption[32];
// char *psrevReverseOption;
//
// // Use psrev to create a spool file
//
// printInfo = [NXApp printInfo];
//
// if ([printInfo isAllPages]) {
// psrevPagesOption[0] = '\0';
// } else {
// sprintf(psrevPagesOption, " -s%d-%d",
// [printInfo firstPage], [printInfo lastPage]);
// }
//
// if ([printInfo pageOrder] == NX_DESCENDINGORDER) {
// psrevReverseOption = ""; // psrev reversed by default
// } else {
// psrevReverseOption = " -R";
// }
//
// NXGetTempFilename(spoolFileName,
// strchr(spoolFileName, 'X')-spoolFileName);
//
// psrevCommand = malloc(strlen(psrevCommandFormat)-8 +
// strlen(psrevPagesOption) +
// strlen(psrevReverseOption) +
// strlen(fileName) +
// strlen(spoolFileName) +
// 1);
//
// if (psrevCommand) {
// int result;
// sprintf(psrevCommand, psrevCommandFormat,
// psrevPagesOption, psrevReverseOption,
// fileName, spoolFileName);
//
// result = system(psrevCommand);
// if (result != 0) {
// // ???
// }
// free(psrevCommand);
// } else {
// // ???
// }
//
// [printInfo setOutputFile:spoolFileName];
//
// // Now do something with the spool file
//
// switch (pickedButtonTag) {
// case NX_PREVIEWTAG:
// {
// port_t port;
// int openedOk;
//
// port = NXPortFromName("Preview", NULL);
// if (port == PORT_NULL) {
// // ???
// } else {
// int retCode;
// Speaker *speaker = [Speaker new];
// [speaker setSendPort:port];
// retCode = [speaker openTempFile:spoolFileName
// ok:&openedOk];
// if (retCode != 0 || !openedOk) {
// // ???
// }
// [speaker free];
// }
// }
// break;
// case NX_OKTAG:
// {
// const char *printCommandFormat = "lpr -sr%s%s %s";
// // "-sr" will delete the file after it is printed
// int copies;
// char *printCommand;
// char printCopiesOption[16];
// char *printPrinterOption;
// const char *printerName;
//
// copies = [printInfo copies];
// if (copies > 1) {
// sprintf(printCopiesOption, " -#%d", copies);
// } else {
// printCopiesOption[0] = '\0';
// }
//
// printerName = [printInfo printerName];
// if (printerName) {
// printPrinterOption = malloc(strlen(printerName) +
// 4 /* room for " -P" & '\0' */);
// sprintf(printPrinterOption, " -P%s", printerName);
// } else {
// printPrinterOption = malloc(1); // so that free() works
// *printPrinterOption = '\0';
// }
//
// if (printerName == NULL) {
// // ???
// }
//
// printCommand = malloc(strlen(printCommandFormat)-6 +
// strlen(printCopiesOption) +
// strlen(printPrinterOption) +
// strlen(spoolFileName) +
// 1);
// if (printCommand) {
// int result;
// sprintf(printCommand, printCommandFormat,
// printCopiesOption, printPrinterOption,
// spoolFileName);
// result = system(printCommand);
// if (result != 0) {
// // ???
// }
// free(printCommand);
// } else {
// // ???
// }
// }
// break;
// case NX_SAVETAG:
// {
// fprintf(stderr, "%s\n", [printInfo outputFile]);
// unlink(spoolFileName);
// }
// break;
// }
// }
// return self;
// }
- setPanel:anObject
{
panel = anObject;
return self;
}
@end